机器学习新手工程师常犯的6大错误


作者:李亚洲

理所当然地使用默认损失函数

在刚入门的时候,均方误差作为损失函数是很好的默认选择。但是当需要处理现实问题的时候,这种未经专门设计的损失函数很少能给出最优解。

拿欺诈检测为例。为了与你真正的商业目标一致,需要按照欺诈造成的损失美元金额的比例惩罚假负类。使用均方误差能给你一个还不错的结果,但不会是当前最佳的结果。

要点:每一次都自定义损失函数,使之紧密匹配你的目标。

对所有问题都使用一种算法/方法

很多人一旦完成了入门教程之后,就开始在所有的案例中都使用同一种算法。这很常见,他们觉得这种算法的效果和其它算法是一样的。这种假设是很糟糕的,最终会带来很差的结果。

解决办法是让数据为你选择模型。当你把数据预处理之后,将其馈送到多个不同的模型中去,看看结果如何。你将会了解哪些模型最适用,而哪些模型并不适合。

要点:如果你一直使用同一种算法,这可能意味着你的结果并不是最好的。

忽略异常值

异常值有时候很重要,有时候又可以忽略不计,视情况而定。以收入预测为例,有时候收入会突然出现很大的变动,观察这种现象并了解其原因是很有帮助的。有时候异常值由某种误差造成,那么这时可以放心地忽略它们,并将其从你的数据中删除。

从模型的角度来看,有些模型对异常值更加敏感。以 Adaboost 为例,它会将异常值当做重要的例子,并给予异常值极大的权重,而决策树可能只是简单的把异常值当做一个错误分类(false classification)。

要点:每一次开始工作之前,先仔细观察数据,决定异常值是否应该被忽略,如果无法决定,就更仔细地观察。

未正确处理周期特征

一天 24 小时、一周七天、一年 12 个月,以及风向都是周期特征。很多机器学习新手工程师不知道把这些特征转换成表示能够保存信息,如 23 时和 0 时很接近。

以小时为例,最佳处理方式是计算它的 sin 和 cos,这样你可以将该周期特征表示为一个圆的 (x,y) 坐标。在以这种方式表示的时间中,23 时和 0 时就是在数值上紧挨着的两个数,仅此而已。

要点:如果你在研究中遇到周期特征,但没有将其转换成表示,那你就是在给模型添加垃圾数据。

未经标准化的 L1/L2 正则化

L1 和 L2 正则化惩罚较大的系数,是一种对线性或 logistic 回归进行正则化的常用方式。但是,很多机器学习工程师没有意识到使用正则化之前对特征进行标准化的重要性。

假设你有一个线性回归模型,其中一个特征是「交易金额」。如果交易金额的单位是美元,那么它的系数应该是单位为美分的系数的 100 倍。这可能会引起偏差,使模型惩罚实际较小的特征。为了避免该问题,需要将这些特征进行标准化,这样正则化对于所有特征都是平等的。

要点:正则化很好用,但是如果你不把特征标准化,会出现很让人头疼的问题。

把线性回归或 logistic 回归的系数绝对值当作判断特征重要性的依据

很多现成的线性回归器为每个系数返回 p 值,一些机器学习新手工程师认为对于线性模型而言,系数的值越大,则该特征越重要。这并不准确,因为变量的大小会改变系数的绝对值。如果特征是共线的,则系数可以从一个特征转换到另一个特征。数据集的特征越多,特征是共线的可能性就越大,这种对特征重要性的简单解释的可信度就越低。

要点:了解哪些特征对结果的影响力最大非常重要,但是仅凭系数无法确定。

做一些项目并且获得好的结果,感觉就像赢了一百万!你努力工作,研究结果证明你做的不错,但是和任何行业一样,魔鬼总是隐藏在细节中,精密的图表也可能隐藏偏差和误差。本文列出的错误并不是全部,只是想刺激读者思考你的解决方案中可能隐藏哪些细微问题。要想获取好的结果,按照流程工作很重要,并且仔细检查确保不犯常见错误。

来源:36大数据